package com.sub.spark.sql.source;

import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SaveMode;
import org.apache.spark.sql.SparkSession;

/**
 * @ClassName CSVSource
 * @Description: 从CSV文件读取数据，数据用逗号分隔
 * @Author Submerge.
 * @Since 2025/5/24 14:21
 * @Version 1.0
 */
public class CSVSource {

    public static void main(String[] args) throws InterruptedException {

        SparkSession sparkSession = SparkSession.builder().appName("sub-spark-csv").master("local[2]").getOrCreate();

        // 读取CSV文件
        Dataset<Row> csv = sparkSession.read()
                .option("header", true)//配置参数-是否存在头：存在则第一行作为数据列名
                .option("seq", ",")//配置参数-分隔符,默认为逗号，可以指定其他符号如"/","/t",";","_"
                .csv("data/demo/spark/user.csv");

        csv.show();
        System.out.println("=========");

        //注册临时表
        csv.createOrReplaceTempView("csv");
        //使用sql查询
        sparkSession.sql("select * from csv").show();

        //写出数据到CSV文件
        csv.write()
                .mode(SaveMode.Append)//配置参数-存储模式
                .option("header", true)//配置参数-是否存在头：存在则第一行作为数据列名
                .csv("data/output/user_out.csv");


        //Thread.sleep(1000000000);

        sparkSession.stop();
    }

}
